#!/usr/bin/env python3  /*设定脚本文件直接能执行*/
# -*- coding:utf-8 -*-   /*设置编码*/
"""
@Author: zhuo
@Software: PyCharm
@File: tQGridTitle.py
@Time: 2024/1/18 10:15
@Function：ctQGridTitle：自定义格栅标题，格栅布局的标题栏，可设置GUI图标及名称。
"""
from PySide6.QtCore import *
from PySide6.QtWidgets import *
from PySide6.QtGui import *


class ctQGridTitle(QWidget):
    """
    自定义标题：实现图标和标签的设置
    """

    # 初始化
    def __init__(self, width, height, color):
        """
        function:  初始化
              in:  width：图标宽度
                   height：图标高度，也是标题栏的高度
                   color：标签文本颜色，建议跟随图标颜色
             out:  None
          return:  None
          others:  Initialize
        """
        # 继承自父类
        super(ctQGridTitle, self).__init__()
        # 图标宽度
        self.w = width
        # 图标高度
        self.h = height
        # 标签文本颜色
        self.c = color

        # 标题栏的主布局 栅格布局
        self.layoutMain = QGridLayout(self)
        # 标题栏图标
        self.lblIcon = QLabel(self)
        # 标题栏标题
        self.lblTitle = QLabel(self)
        # 标题栏弹簧
        self.spacer = QSpacerItem(200, self.h, QSizePolicy.Expanding, QSizePolicy.Expanding)
        # 窗体设置高度
        self.setFixedHeight(self.h)
        # 调用布局函数
        self.__f_layoutFunc()

    # 标题界面布局函数
    def __f_layoutFunc(self):
        """
        function:  标题界面布局函数
              in:  None
             out:  None
          return:  None
          others:  Title Interface Layout Func
        """
        # 设置图标大小,设置标题高度
        self.lblIcon.setFixedSize(self.w, self.h)
        self.lblTitle.setFixedHeight(self.h)
        # 设置文本颜色为蓝色、字体为微软雅黑、字体大小为12、字体为粗体
        self.lblTitle.setStyleSheet(f"color: {self.c};"
                                    "font-family: Microsoft YaHei;"
                                    "font-size: 14pt;"
                                    "font-weight:bold;")
        # 图标及标题设置居中
        self.lblIcon.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self.lblTitle.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        # 设置布局
        self.setLayout(self.layoutMain)
        # 设置控件间的距离
        self.layoutMain.setSpacing(0)
        self.layoutMain.setContentsMargins(0, 0, 0, 0)
        # 主布局添加控件
        self.layoutMain.addItem(self.spacer, 0, 0)
        self.layoutMain.addWidget(self.lblIcon, 0, 1)
        self.layoutMain.addWidget(self.lblTitle, 0, 2)
        self.layoutMain.addItem(self.spacer, 0, 3)

    # 设置标题栏标题
    def f_setTitle(self, title):
        """
        function:  设置标题栏标题
              in:  title：标题栏标题
             out:  None
          return:  None
          others:  Set Title Of The Title
        """
        # 设置标题
        self.lblTitle.setText(title)

    # 设置图标
    def f_setIcon(self, icon):
        """
        function:  设置窗体
              in:  icon：icon图标的路径
             out:  None
          return:  None
          others:  Set Icon Func
        """
        # 输入为图片路径，比如ico文件内的icon.png图片
        self.lblIcon.setPixmap(QPixmap(icon))
        # 设置图标自适应
        self.lblIcon.setScaledContents(True)
